A peer to peer network is a network of two or more computers that employ a same program or type of program to communicate and share data. Each computer or peer (e.g., node) is typically considered equal in terms of responsibilities and acts as a server or relay to others in the network. In the invention, self-adapting direct peer to peer, each computer or peer does not act as a server or relay to others in a network at any time. A peer to peer network is unlike a client/server architecture where a dedicated central server is required. Peer to peer networks have become increasingly popular—users employ peer to peer networks for sharing of data, such as audio files, multimedia files, video files, programs, digital images and the like.
One common implementation of a peer to peer network utilizes a central server to maintain a list of nodes and data stored on the nodes, which is an implementation utilized by file sharing software such as Napster. FIG. 1 is a block diagram illustrating a system of a prior art type of peer to peer network implementation. The system includes a central server 300 and a plurality of nodes 100, 200. Respective nodes of the plurality of nodes can join and un-join the system at will. Upon joining, the nodes 100 provide (3) a list of files they are capable of serving to the central server 300. The central server 300 adds the list of files to a list of the available files of all nodes. Upon un-joining by the nodes, the list of files are removed from the list of available files for all the nodes. A requesting node 200 of the nodes requests a file by sending a request (4) for the file to the central server 300. The central server 300 maintains the list of available files of all nodes in the system and responds to the request with a list of nodes (5) capable of answering or satisfying the request. The requesting node 200 then makes a file request (1) to a node 100 that has the file, and the recipient node 100 responds with the file transfer (2). The requesting node 200 then obtains the file via a direct connection to the node 100 able to satisfy the request (hereinafter referred to as a transferring node). The central server 300 is not involved in the transfer of the file to the requesting node 200 (hence the name peer to peer).
Another common implementation of a peer to peer network utilizes a central server as the master which maintains a list of nodes, data about those nodes, and which is utilized in the request, response events of the nodes, and relay node or nodes that are utilized in the delivery of data and communications between the nodes. FIG. 2 is a block diagram illustrating a system of such type of peer to peer network with relay node implementation and FIG. 3 is a block diagram illustrating a system of such type of peer to peer network with supernodes, the addition of one or more relay nodes. The system includes a central server 300 and a plurality of nodes and relay nodes 100, 200 and 400. Respective nodes of the plurality of nodes can join and un-join the system at will. Upon joining, the nodes register with the central server 300. The central server 300 maintains the list of nodes and information pertaining to those nodes. Upon un-joining by the nodes, the nodes become unregistered on the central server 300.
In the conventional peer-to-peer network with relay node as shown in FIG. 2, a requesting node 100 of the nodes requests an action or event by sending a request (1a) to the central server 300. The central server 300 relays the request (1b) to the requested node 200, receives the response (2a) and relays the response (2b) to the requesting node 100. In the response, amongst other data, is the relay node able to satisfy the relay of the requested event or action. The requesting node 100 then confirms the action or event (3a) with the central server 300, which is relayed (3b) to the requested node 200, and the requesting and requested nodes are able to satisfy their requested action or event (4) via the relay node 400. The central server 300 is not involved in the relay of the action or event to the requesting node (hence the name peer to peer).
In a supernode peer-to-peer network as shown in FIG. 3, a requesting node 100 of the nodes requests an action or event by sending a request (1a) to the central server 300. The central server 300 relays the request (1b) to the requested node 200, receives the response (2a) and relays the response (2b) to the requesting node 100. In the request (1b) and response (2b), amongst other data, is the relay node or nodes 400 able to satisfy the relay of the requested event or action. The requesting node 100 then confirms the action or event (3a) with the central server 300, which is relayed (3b) to the requested node 200, and the requesting and requested nodes are able to satisfy (4) their requested action or event via the relay nodes 400. The central server 300 is not involved in the relay of the action or event to the requesting node 100 (hence the name peer to peer). In addition, the central server 300 periodically updates (5) the relay nodes 400 with relevant information including ability to service requests.
Although the conventional systems of FIG. 1, FIG. 2 and FIG. 3 perform adequately, there are a number of potential problems associated with such systems. One problem is that the system has a single point of failure—even though the central server is not involved in serving requests, the central server is involved in matching every request and determining a relay node or nodes. Thus, if the central server goes off-line, the entire network can cease to function. A second problem is lack of scalability; the central server is required to track relay nodes available at all nodes and determine which of these relay nodes are best suited to serve the action or event; and since nodes can appear and disappear, the central server must periodically contact each of the relay nodes (e.g., by pinging the nodes). Such repeated updating can be a significant burden on the central server and the burden increases coincidentally with an increase in number of nodes in the system.
Another problem is that each node may become a relay node without user knowledge. This can lead to performance problems on the nodes as they process and route anonymous traffic not related to their communications, and to security related problems as the node has no control over the origin or destination of the traffic that is being routed or the content and directives of the traffic.